package com.example.flow.utils;

import java.util.ArrayList;
import java.util.List;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;

import lombok.extern.slf4j.Slf4j;

/**
 * Gson帮助类
 *
 * @author safe
 * @since 2019/7/22 20:40
 */
@Slf4j
public final class GsonUtil {

    private static Gson gson = new GsonBuilder().serializeNulls()
        .setDateFormat("yyyy-MM-dd HH:mm:ss")
        .create();

    /**
     * 禁止实例化
     */
    private GsonUtil() {}

    /**
     * 实体转json
     *
     * @param obj 要转的实体
     * @return String json
     */
    public static String obj2Json(Object obj) {
        return gson.toJson(obj);
    }

    /**
     * jsonString转对象
     *
     * @param <T> 泛型
     * @param jsonStr json
     * @param type 对象类型
     * @return 对象
     */
    public static <T> T json2Obj(String jsonStr, Class<T> type) {
        return gson.fromJson(jsonStr, type);
    }

    /**
     * json转list
     *
     * @param str 字符串
     * @param tClass 类类型
     * @return list
     */
    public static <T> List<T> jsonToList(String str, Class<T> tClass) {
        List<T> list = new ArrayList<>();
        JsonArray array = new JsonParser().parse(str)
            .getAsJsonArray();
        for (final JsonElement elem : array) {
            list.add(new Gson().fromJson(elem, tClass));
        }
        return list;
    }
}
